package cap4;

class  Parking{
private Vehiculo[] T;
//Constructor
public Parking(int max){
   T = new Vehiculo[max];}
//Comandos
public void estacionar(Vehiculo unVeh, int p) {
/*Asigna el vehiculo a la plaza, requiere que la plaza exista*/
    T[p] = unVeh;}
public void salir(Vehiculo unVeh){
/*Busca en el estacionamiento un vehículo equivalente a unVeh y libera la plaza*/
int i = 0; boolean esta=false; 
while (i < T.length && !esta){
   if (T[i] != null)
     esta = unVeh.equals(T[i]) ;
   else 
     i++;}
 if (esta)
   T[i] = null;}
public void salir(int p){
/* Elimina el elemento de la plaza p, requiere que p sea un plaza válida*/
    T[p] = null;}
//Consultas
public int maxUnidades(){
  return T.length;}
public int unidadesOcupadas(){
/*Retorna la cantidad de unidades en las que hay un vehículo asignado*/
  int cant=0;
  for (int i=0; i<=T.length;i++)
    if (T[i] != null)
      cant++;
  return cant;}
public boolean plazaOcupada(int p){
//Requiere p válida
   return T[p] != null;}
public boolean hayPlazaOcupada(){
int i = 0; boolean hay=false; 
while (i < T.length && !hay){
	if (T[i] != null)
	     hay = true ;
	   i++;}
	return hay;}
	public boolean estaLleno(){
	int i = 0; boolean hay=false; 
	while (i < T.length && !hay){
	   if (T[i] == null)
	     hay = true ;
	   i++;}
	return !hay;}
	public boolean estaVehiculo(Vehiculo unVeh){
	/*Decide si una plaza mantiene un vehículo equivalente a unVeh que asume ligado*/
	int i = 0; boolean esta=false; 
	while (i < T.length && !esta){
	   if (T[i] != null)
	     esta = unVeh.equals(T[i]) ;
	   i++;}
	return esta;}
	public boolean existePlaza (int p) {
	    return p >= 0 && p < T.length;}
	public Vehiculo recuperarVehiculo(int p) {
	// Requiere que p sea una posición válida
	    return T[p];}
	public Vehiculo menorKm() {
	/*Asume que no hay vehículos con más de 500000 km
	Puede retornar nulo si la tabla está vacía*/
	  Vehiculo v = null; int menor = 500000;
	  for (int i=0; i<=T.length;i++)
	    if (T[i] != null &&  T[i].obtenerKm() < menor){
	        v = T[i]; menor = v.obtenerKm();}
	  return v;}
	public int cantModelo(int mod) {
	  int cant=0;
	  for (int i=0; i<=T.length;i++)
	    if (T[i] != null &&  T[i].obtenerModelo() == mod)
	         cant++;
	  return cant;}
	public float valuacionTotal() {
	  float v = 0;
	  for (int i=0; i<=T.length;i++)
	    if (T[i] != null)
	         v = v+T[i].obtenerValuacion();
	  return v;}}